home *** CD-ROM | disk | FTP | other *** search
/ Merciful 5 / Merciful - Disc 5.iso / software / p / pcqpascalv1.2d.lha / Examples2 / ShowPCX / ShowPCX.P next >
Text File  |  1997-05-06  |  15KB  |  629 lines

  1. PROGRAM ShowPCX (input , output);
  2.  
  3. {$I "Include:Exec/Exec.i" }
  4. {$I "Include:Graphics/Graphics.I" }
  5. {$I "Include:Hardware/IntBits.I" }
  6. {$I "Include:libraries/Dosextens.I" }
  7. {$I "Include:Intuition/intuition.i" }
  8. {$I "Include:Intuition/Intuitionbase.i" }
  9. {$I "Include:Utils/Parameters.I" }
  10. {$I "Include:Utils/StringLib.i" }
  11. {$I "INCLUDE:Graphics/Blitter.i" }
  12. {$I "Include:Graphics/GfxBase.i" }
  13. {$I "Include:Graphics/View.i" }
  14. {$I "Include:graphics/Pens.i" }
  15. {$I "Include:Graphics/rastport.i" }
  16.  
  17. (*                            ShowPCX V1.0                              *)
  18.  
  19. (*            ein Anzeigeprogramm für Bilder im PCX-Format              *)
  20.  
  21. (*  Autor   :   Andreas Neumann     /   05.03.94                        *)
  22.  
  23. (*  History :                                                           *)
  24.  
  25. (*              [1.00]  -   erste Version, basierend auf einer kurzen   *)
  26. (*                          PCX-Dokumentation von Relax Productions im  *)
  27. (*                          C-F. Läuft problemlos mit V2.8 mit Palette  *)
  28. (*                          und V3.0-PCX-Bildern zusammen.              *)
  29.  
  30. (*  ShowPCX © 1994 by Andreas Neumann                                   *)
  31. (*  ShowPCX ist freely distributable, es darf jedoch nur mit Erlaubnis  *)
  32. (*  des Autoren auf andere Disk-Serien übernommen werden.               *)
  33.  
  34. (*  Bei Fragen  :   Andreas Neumann ; Auf dem Ruhbühl 151 ;             *)
  35. (*                  88090 Immenstaad ; Tel.: 07545 / 3483               *)
  36.  
  37.  
  38. CONST
  39.  gfxname : String = ("graphics.library");
  40.  
  41.  CSI = CHR($9B);
  42.  
  43. TYPE
  44.  
  45.  
  46.     PCXHEAD = RECORD
  47.                 bytesperline,
  48.                 paletteinfo,
  49.                 horizres,
  50.                 vertres,
  51.                 winleft,
  52.                 wintop,
  53.                 winright,
  54.                 winbottom   :   SHORT;
  55.                 colormap    :   ARRAY [0..255] OF ARRAY [0..2] OF BYTE;
  56.                 planes,
  57.                 depth,
  58.                 fileid,
  59.                 bitsperpixel,
  60.                 version,
  61.                 encoding    :   BYTE;
  62.               END;
  63.  
  64.  
  65.         PCXHeadPtr  =   ^PCXHEAD;
  66.  
  67.  
  68. VAR
  69.     PCXInfo   : PCXHEAD;
  70.  
  71.     PNuScreen : NewScreen;
  72.     PNuWindow : NewWindow;
  73.  
  74.  
  75. TYPE
  76.  
  77.     PCXErrors = (pcxNoErr,pcxOutofmem,pcxOpenScreenfailed,
  78.                  pcxOpenWindowfailed,pcxopenfailed,pcxWrongVersion,
  79.                  pcxReadWriteFailed);
  80.  
  81. VAR
  82.     PCXError : PCXErrors;
  83.  
  84. CONST
  85.     { ReadPCX-Flags }
  86.  
  87.     pfront    = $1;
  88.     pvisible  = $2;
  89.     pdontopen = $4;
  90.     pf_window = $8;
  91.  
  92.     { PCXError-Strings }
  93.  
  94.     PCXErrorStrings : ARRAY [0..6] OF String =
  95.                         ("No Error","Out of Memory","OpenScreen failed",
  96.                          "OpenWindow failed","Open Failed","Wrong Iff",
  97.                          "ReadWrite failed");
  98.  
  99.  
  100.  
  101. VAR
  102.     dummyint,
  103.     emptymouse      :   INTEGER;
  104.     lname           :   STRING;
  105.     ShowPCXScreen   :   ScreenPtr;
  106.     awindow,
  107.     ShowPCXWindow   :   WindowPtr;
  108.     MyGfxBase       :   GfxBasePtr;
  109.     MyIntuitionBase :   IntuitionBasePtr;
  110.     IMes            :   IntuiMessagePtr;
  111.     WB              :   WBStartupPtr;
  112.  
  113. {$A     XREF    _p%IntuitionBase    }
  114.  
  115.  
  116. PROCEDURE OffDisplay;
  117.  
  118. BEGIN
  119.  {$A    move.w  #$100,$DFF096    }
  120. END;
  121.  
  122.  
  123. PROCEDURE OnDisplay;
  124.  
  125. BEGIN
  126. {$A     move.w  #$8300,$DFF096   }
  127. END;
  128.  
  129.  
  130. PROCEDURE PointerOff (dummywin : WindowPtr);
  131.  
  132. BEGIN
  133.  WHILE VBeamPos>200 DO ;
  134.  SetPointer (dummywin,Adr(emptymouse),0,0,0,0);
  135. END;
  136.  
  137.  
  138. PROCEDURE PointerOn (dummywin : WindowPtr);
  139.  
  140. BEGIN
  141.  ClearPointer (dummywin);
  142. END;
  143.  
  144.  
  145. PROCEDURE DoStyle (stil , ffarbe : Byte);
  146.  
  147. BEGIN
  148.  WRITE (CSI,stil,";3",ffarbe,"m");
  149. END;
  150.  
  151. FUNCTION Hoch (basis : INTEGER; exp : INTEGER) : INTEGER;
  152.  
  153. VAR h1 : INTEGER;
  154.     h2 : INTEGER;
  155.  
  156. BEGIN
  157.  h1:=1;
  158.  IF exp>0 THEN
  159.   FOR h2:=1 TO exp DO
  160.    h1:=h1*basis;
  161.  Hoch:=h1;
  162. END;
  163.  
  164.  
  165. FUNCTION GetIBase : IntuitionBasePtr;
  166.  
  167. BEGIN
  168. {$A     move.l  _p%IntuitionBase,d0
  169. }
  170. END;
  171.  
  172. FUNCTION IsAGA (gb : GfxBasePtr) : BOOLEAN;
  173.  
  174. BEGIN
  175.  IF (gb^.ChipRevBits0 AND %100)=%100 THEN
  176.   IsAGA:=TRUE
  177.  ELSE
  178.   IsAGA:=FALSE;
  179. END;
  180.  
  181.  
  182. PROCEDURE MySetRGB (vp : ViewPortPtr ; nr , r , g , b : BYTE ; gb : GfxBasePtr ; display : BOOLEAN);
  183.  
  184. VAR sptr    :   ^Short;
  185.  
  186. BEGIN
  187.  sptr:=vp^.ColorMap^.ColorTable;
  188.  sptr:=Address(Integer(sptr)+(nr*SIZEOF(SHORT)));
  189.  sptr^:=((r shr 4)*$100)+((g shr 4)*$10)+(b shr 4);
  190.  IF IsAGA (gb) THEN
  191.  BEGIN
  192.   sptr:=vp^.ColorMap^.LowColorBits;
  193.   sptr:=Address(Integer(sptr)+(nr*SIZEOF(SHORT)));
  194.   sptr^:=((r AND $F)*$100)+((g AND $F)*$10)+((b AND $F));
  195.  END;
  196.  IF display THEN
  197.  BEGIN
  198.   MakeVPort (gb^.ActiView,vp);
  199.   MrgCop (gb^.ActiView);
  200.  END;
  201. END;
  202.  
  203.  
  204. PROCEDURE BufSkip (VAR bufptr : Address ; bytes : INTEGER);
  205.  
  206. BEGIN
  207.  bufptr:=Address(Integer(bufptr)+bytes);
  208. END;
  209.  
  210. FUNCTION GetByte (VAR workptr : ^Byte) : BYTE;
  211.  
  212. VAR b   :   BYTE;
  213.  
  214. BEGIN
  215.  b:=workptr^;
  216.  BufSkip (workptr,SIZEOF(BYTE));
  217.  GetByte:=b;
  218. END;
  219.  
  220. FUNCTION GetShort (VAR workptr : ^Short ; pclike : BOOLEAN) : SHORT;
  221.  
  222. VAR
  223.     s   :   SHORT;
  224.     bptr1,
  225.     bptr2   :   ^Byte;
  226.  
  227. BEGIN
  228.  s:=workptr^;
  229.  bptr1:=Address(workptr);
  230.  BufSkip (workptr,SIZEOF(BYTE));
  231.  bptr2:=Address(workptr);
  232.  BufSkip (workptr,SIZEOF(BYTE));
  233.  IF pclike THEN
  234.   s:=(bptr2^*$100)+bptr1^;
  235.  GetShort:=s;
  236. END;
  237.  
  238.  
  239. FUNCTION ReadPCX (name : String; Flags : INTEGER;
  240.                   VAR myScreen : ScreenPtr;
  241.                   VAR myWindow : WindowPtr) : BOOLEAN;
  242.  
  243. VAR rp1,
  244.     rp2,
  245.     rp3,
  246.     rp4,
  247.     rp5,
  248.     rp6,
  249.     rp7,
  250.     rp8,
  251.     PCXLength,
  252.     RPos,
  253.     RLen    :   INTEGER;
  254.     PCXWork,
  255.     PCXBuffer   :   Address;
  256.     PCXHandle   : FileHandle;
  257.     PCXLock :   FileLock;
  258.     PCXFInfo    :   FileInfoBlockPtr;
  259.     pcxdone :   BOOLEAN;
  260.     rpbptr  :   ^Byte;
  261.  
  262. PROCEDURE OpenPCXDisplay;
  263.  
  264. VAR DummyRP : RastPortPtr;
  265.     os      : BYTE;
  266.     i       : INTEGER;
  267.     BitMaps : ARRAY [0..7] OF PLANEPTR;
  268.     BM      : BitMapPtr;
  269.  
  270. BEGIN
  271.  WITH pNuScreen DO
  272.  BEGIN
  273.     width:=PCXInfo.winright-PCXInfo.winleft+1;
  274.     height:=PCXInfo.winbottom-PCXInfo.wintop+1;
  275.  
  276.     leftEdge:=PCXInfo.winleft;
  277.     topEdge:=PCXInfo.wintop;
  278.  
  279.     depth:=PCXInfo.depth;
  280.  
  281.     viewModes:=0;
  282.     IF (width>400) AND ((depth<5) OR IsAga(GfxBase)) THEN ViewModes:=ViewModes OR HIRES;
  283.     IF height>300 THEN ViewModes:=ViewModes OR LACE;
  284.  
  285.     detailPen:=0; blockPen:=0;
  286.     stype:=CUSTOMSCREEN_f+SCREENQUIET_f;
  287.     font:=NIL;
  288.     defaultTitle:=NIL;
  289.     gadgets:=NIL;
  290.     customBitMap:=NIL;
  291.     IF NOT ((pfront AND Flags)=pfront) THEN Inc(sType,SCREENBEHIND_f);
  292.  END;
  293.  
  294.  IF (pdontopen AND Flags)=pdontopen THEN
  295.  BEGIN
  296.   pNuScreen.SType:=pNuScreen.SType OR CustomBitMap_F;
  297.   WITH pNuScreen DO
  298.   BEGIN
  299.    CustomBitMap:=AllocMem(SizeOf(BitMap),MEMF_PUBLIC+MEMF_CLEAR);
  300.    InitBitMap (CustomBitMap,depth,width,height);
  301.    i:=0;                  {^}
  302.    REPEAT
  303.     customBitMap^.planes[i]:=AllocRaster(width,height);
  304.     BitMaps[i]:=customBitMap^.planes[i];
  305.     IF BitMaps[i]=NIL THEN
  306.      PCXError:=pcxOutOfMem
  307.     ELSE
  308.      BltClear (BitMaps[i],RASSIZE(width,height),0);
  309.     Inc(i);
  310.    UNTIL (i=depth) OR (PCXError<>pcxNoErr);
  311.    IF PCXError<>pcxNoErr THEN
  312.    WHILE i>1 DO
  313.    BEGIN
  314.     Dec(i);
  315.     FreeRaster(BitMaps[i],width,height);
  316.    END;
  317.   END;
  318.  END
  319.  ELSE
  320.  BEGIN
  321.   myScreen:=OpenScreen (Adr(pNuScreen));
  322.   IF MyScreen=NIL THEN
  323.    PCXError:=pcxOpenScreenfailed
  324.   ELSE
  325.   BEGIN
  326.    DummyRP:=Adr(MyScreen^.SRastPort);
  327.    BM:=DummyRP^.BitMap;
  328.    FOR i:=0 TO pNuScreen.depth-1 DO
  329.     BitMaps[i]:=BM^.planes[i];
  330.    FOR i:=0 TO (Hoch(2,PCXInfo.depth)-1) DO
  331.     MySetRGB (Adr(MyScreen^.SViewPort),i,PCXInfo.colormap[i,0],PCXInfo.colormap[i,1],PCXInfo.colormap[i,2],GfxBase,i=(Hoch(2,PCXInfo.depth)-1));
  332.   END;
  333.  END;
  334.  WITH pNuWindow DO
  335.  BEGIN
  336.   leftEdge:=0; topEdge:=0;
  337.   width:=PCXInfo.winright-PCXInfo.winleft+1;
  338.   height:=PCXInfo.winbottom-PCXInfo.wintop+1;
  339.   detailPen:=1;
  340.   blockPen:=0;
  341.   idcmpFlags:=MOUSEBUTTONS_f;
  342.   flags:=BORDERLESS+NOCAREREFRESH+RMBTRAP+ACTIVATE;
  343.   firstGadget:=NIL;
  344.   checkMark:=NIL;
  345.   title:=NIL;
  346.   screen:=MyScreen;
  347.   bitMap:=NIL;
  348.   wtype:=CUSTOMSCREEN_F;
  349.  END;
  350.  IF ((pf_window AND FLAGS)=pf_window) AND (MyScreen<>NIL) THEN
  351.  BEGIN
  352.   MyWindow:=OpenWindow (Adr(pNuWindow));
  353.   If Mywindow=NIL THEN
  354.   begin
  355.    CloseScreen (MyScreen);
  356.    MyScreen:=NIL;
  357.    PCXError:=pcxOpenWindowFailed;
  358.   END;
  359.  END;
  360.  IF NOT ((pvisible AND Flags)=pvisible) THEN OffDisplay;
  361. END;
  362.  
  363.  
  364. PROCEDURE PaintPCX (x , y : SHORT ; c : BYTE);
  365.  
  366. BEGIN
  367.  SetAPen (Adr(myscreen^.SRastPort),c);
  368.  WritePixel (Adr(myscreen^.SRastPort),x,y);
  369. END;
  370.  
  371. BEGIN
  372.  PCXError:=pcxnoErr;
  373.  PCXHandle:=NIL;
  374.  MyScreen:=NIL;
  375.  MyWindow:=NIL;
  376.  RPos:=0; RLen:=0;
  377.  PCXBuffer:=NIL; PCXLength:=0;
  378.  PCXHandle:=DOSOpen (name,MODE_OLDFILE);
  379.  IF PCXHandle=NIL THEN
  380.  BEGIN
  381.   PCXError:=pcxReadWriteFailed;
  382.  END
  383.  ELSE
  384.  BEGIN
  385.   PCXLock:=Lock(name,MODE_OLDFILE);
  386.   IF PCXLock=NIL THEN
  387.   BEGIN
  388.    DOSClose(PCXHandle);
  389.    PCXError:=pcxReadWriteFailed;
  390.   END
  391.   ELSE
  392.   BEGIN
  393.    PCXFInfo:=AllocMem (Sizeof(FileInfoBlock),MEMF_CLEAR+MEMF_PUBLIC);
  394.    IF Examine (PCXLock , PCXFInfo)=TRUE THEN
  395.    BEGIN
  396.     PCXLength:=PCXFInfo^.fib_Size;
  397.    END;
  398.    FreeMem (PCXFInfo,SizeOf(FileInfoBlock));
  399.    UnLock (PCXLock);
  400.    PCXBuffer:=AllocMem (PCXLength,MEMF_CLEAR+MEMF_PUBLIC);
  401.    IF PCXBuffer=NIL THEN
  402.    BEGIN
  403.     DOSClose (PCXHandle);
  404.     PCXError:=pcxReadWriteFailed;
  405.    END
  406.    ELSE
  407.    BEGIN
  408.     IF DOSRead (PCXHandle,PCXBuffer,PCXLength)<>PCXLength THEN
  409.     BEGIN
  410.      DOSClose (PCXHandle);
  411.      FreeMem (PCXBuffer,PCXLength);
  412.      PCXBuffer:=NIL;
  413.      PCXError:=pcxReadWriteFailed;
  414.     END
  415.     ELSE
  416.     BEGIN
  417.      DOSClose (PCXHandle);
  418.      PCXWork:=PCXBuffer;
  419.     END;
  420.    END;
  421.   END;
  422.  END;
  423.  IF PCXBuffer<>NIL THEN
  424.  BEGIN
  425.   PCXInfo.fileID:=GetByte (PCXWork);
  426.   PCXInfo.version:=GetByte (PCXWork);
  427.   PCXInfo.encoding:=GetByte (PCXWork);
  428.   PCXInfo.bitsperpixel:=GetByte (PCXWork);
  429.   PCXInfo.winleft:=GetShort (PCXWork,TRUE);
  430.   PCXInfo.wintop:=GetShort (PCXWork,TRUE);
  431.   PCXInfo.winright:=GetShort (PCXWork,TRUE);
  432.   PCXInfo.winbottom:=GetShort (PCXWork,TRUE);
  433.   PCXInfo.horizres:=GetShort (PCXWork,TRUE);
  434.   PCXInfo.vertres:=GetShort (PCXWork,TRUE);
  435.   IF (PCXInfo.version=2) THEN
  436.   BEGIN
  437.    FOR rp1:=0 TO 15 DO
  438.     FOR rp2:=0 TO 2 DO
  439.      PCXInfo.colormap[rp1,rp2]:=GetByte(PCXWork);
  440.   END
  441.   ELSE
  442.    BufSkip (PCXWork,16*3);
  443.  
  444.   BufSkip (PCXWork,1);
  445.   PCXInfo.planes:=GetByte (PCXWork);
  446.   IF PCXInfo.version<5 THEN
  447.    PCXInfo.depth:=4
  448.   ELSE
  449.    PCXInfo.depth:=8;
  450.   PCXInfo.bytesperline:=GetShort(PCXWork,TRUE);
  451.   PCXInfo.paletteinfo:=GetShort(PCXWork,TRUE);
  452.   IF (PCXInfo.version=5) THEN
  453.   BEGIN
  454.    PCXWork:=Address(Integer(PCXBuffer)+PCXLength-768);
  455.    FOR rp1:=0 TO 255 DO
  456.     FOR rp2:=0 TO 2 DO
  457.     BEGIN
  458.      PCXInfo.colormap[rp1,rp2]:=GetByte(PCXWork);
  459.     END;
  460.   END;
  461.   PCXWork:=PCXBuffer;
  462.   BufSkip (PCXWork,128); { der Header }
  463.   IF WB=NIL THEN WRITELN ('Zeige......',name);
  464.   OpenPCXDisplay;
  465.   IF PCXError=pcxNoErr THEN
  466.   BEGIN
  467.    rp1:=0;
  468.    WHILE (rp1<(PCXInfo.winbottom-PCXInfo.wintop+1)) AND (Integer(PCXWork)<(Integer(PCXBuffer)+PCXLength)) DO
  469.    BEGIN
  470.     FOR rp2:=1 TO PCXInfo.planes DO
  471.     BEGIN
  472.      rp3:=0;
  473.      rp7:=0;
  474.      pcxdone:=FALSE;
  475.      WHILE pcxdone=FALSE DO
  476.      BEGIN
  477.       CASE PCXInfo.encoding OF
  478.         0   :   BEGIN
  479.                     rp4:=GetByte(PCXWork);
  480.                     IF (PCXInfo.bitsperpixel=1) THEN
  481.                     BEGIN
  482.                      rpbptr:=Address(Integer(myscreen^.SBitMap.Planes[rp2-1])+(myscreen^.SBitMap.BytesPerRow*rp1)+rp3);
  483.                      rpbptr^:=rp4;
  484.                      Inc(rp3);
  485.                     END;
  486.                     IF (PCXInfo.bitsperpixel=8) THEN
  487.                     BEGIN
  488.                      PaintPCX (rp3,rp1,rp4);
  489.                      Inc(rp3);
  490.                     END;
  491.                     pcxdone:=(rp3>=PCXInfo.BytesPerLine);
  492.                 END;
  493.         1   :   BEGIN
  494.                     rp4:=GetByte(PCXWork);
  495.                     IF (rp4 AND %11000000)=%11000000 THEN
  496.                     BEGIN
  497.                      {Count-Byte}
  498.                      rp5:=(rp4 AND %111111);
  499.                      rp4:=GetByte(PCXWork);
  500.                      IF (PCXInfo.bitsperpixel=1) THEN
  501.                      BEGIN
  502.                       WHILE rp5>0 DO
  503.                       BEGIN
  504.                        rpbptr:=Address(Integer(myscreen^.SBitMap.Planes[rp2-1])+(myscreen^.SBitMap.BytesPerRow*rp1)+rp3);
  505.                        rpbptr^:=rp4;
  506.                        Dec(rp5);
  507.                        Inc(rp3);
  508.                       END;
  509.                      END;
  510.                      IF (PCXInfo.bitsperpixel=8) THEN
  511.                      BEGIN
  512.                       SetApen (Adr(myscreen^.SRastPort),rp4);
  513.                       Move(Adr(myscreen^.SRastPort),rp3,rp1);
  514.                       IF rp5>0 THEN
  515.                        Draw(Adr(myscreen^.SRastPort),(rp3+rp5)-1,rp1);
  516.                       Inc (rp3,rp5);
  517.                      END;
  518.                     END
  519.                     ELSE
  520.                     BEGIN
  521.                      IF (PCXInfo.bitsperpixel=1) THEN
  522.                      BEGIN
  523.                       rpbptr:=Address(Integer(myscreen^.SBitMap.Planes[rp2-1])+(myscreen^.SBitMap.BytesPerRow*rp1)+rp3);
  524.                       rpbptr^:=rp4;
  525.                       Inc(rp3);
  526.                      END;
  527.                      IF (PCXInfo.bitsperpixel=8) THEN
  528.                      BEGIN
  529.                       PaintPCX (rp3,rp1,rp4);
  530.                       Inc(rp3);
  531.                      END;
  532.                     END;
  533.                     pcxdone:=(rp3>=PCXInfo.BytesPerLine);
  534.                 END;
  535.         ELSE    ;
  536.       END;
  537.      END;
  538.     END;
  539.     Inc(rp1);
  540.    END;
  541.   END;
  542.   FreeMem (PCXBuffer,PCXLength);
  543.  END;
  544.  ReadPCX:=(PCXError=pcxNoErr);
  545. END;
  546.  
  547.  
  548. BEGIN
  549.  emptymouse:=0;
  550.  MyIntuitionBase:=GetIBase;
  551.  awindow:=MyIntuitionBase^.ActiveWindow;
  552.  lname:=AllocString(255);
  553.  WB:=GetStartupMsg;
  554.  IF WB<>NIL THEN
  555.  BEGIN
  556.   StrCpy (lname,WB^.sm_ArgList^[2].wa_Name);
  557.   IF CurrentDir (WB^.sm_ArgList^[2].wa_Lock)=NIL THEN ;
  558.  END
  559.  ELSE
  560.  BEGIN
  561.   WRITELN;
  562.   DoStyle (3,3);
  563.   WRITE (' SHOWPCX V1.00 ');
  564.   DoStyle (4,3);
  565.   WRITE ('© 1994 by Andreas "Wurzelsepp <:-)" Neumann');
  566.   DoStyle (0,3);
  567.   WRITELN(' of NEUDELSOFT');
  568.   DoStyle (0,1);
  569.   WRITELN ('                    written in PCQ 1.2d - the pure Stuff');
  570.   WRITELN;
  571.   GetParam(1,lname);
  572.  END;
  573.  IF ((StrEq (lname,"?")=TRUE) OR (StrEq (lname,"-h")=TRUE)) AND (WB=NIL) THEN
  574.  BEGIN
  575.   WRITELN (' Erklärung :');
  576.   WRITELN (' ShowPCX dient zum Ansehen von Bilder im PCX-Format. Dies ist das');
  577.   WRITELN (' gängige Format auf MS-DOSen.');
  578.   WRITELN (' Aufgerufen wird ShowPCX über das CLI.');
  579.   WRITELN (' Dazu gibt man ein : "ShowPCX Bildname" [Return]');
  580.   WRITELN (' "ShowPCX ?" oder "ShowPCX -h" zeigt diesen Hilfstext.');
  581.   WRITELN;
  582.  END
  583.  ELSE
  584.  BEGIN
  585.   GfxBase :=OpenLibrary(gfxname, 0);
  586.   MyGfxBase := GfxBase;
  587.  
  588.   PointerOff (awindow);
  589.  
  590.   IF ReadPCX (lname,pf_window+pvisible,ShowPCXScreen,ShowPCXWindow) THEN
  591.   BEGIN
  592.  
  593.    ScreenToFront (ShowPCXScreen);
  594.  
  595.    PointerOff (ShowPCXWindow);
  596.    ActivateWindow (ShowPCXWindow);
  597.  
  598.    REPEAT
  599.  
  600.     dummyint:=0;
  601.     WaitPort (ShowPCXWindow^.UserPort);
  602.     IMes:=Address(GetMsg(ShowPCXWindow^.UserPort));
  603.     IF IMes<>NIL THEN
  604.     BEGIN
  605.      dummyint:=IMes^.Code;
  606.      ReplyMsg (Address(IMes));
  607.     END;
  608.    UNTIL dummyint=SELECTUP;
  609.  
  610.    PointerOn (ShowPCXWindow);
  611.    ScreenToBack (ShowPCXScreen);
  612.    CloseWindow (ShowPCXWindow);
  613.    CloseScreen (ShowPCXScreen);
  614.   END
  615.   ELSE
  616.   BEGIN
  617.    DisplayBeep(NIL);
  618.    IF WB=NIL THEN WRITELN (PCXErrorStrings[Integer(PCXError)]);
  619.   END;
  620.   CloseLibrary (GfxBase);
  621.  END;
  622.  IF awindow<>NIL THEN BEGIN ActivateWindow (awindow); PointerOn (awindow); END;
  623.  FreeString (lname);
  624. END.
  625.  
  626.  
  627.  
  628.  
  629.